使用 Git Hook 实现网站的自动部署 |
您所在的位置:网站首页 › git hooks 自动部署dotnet › 使用 Git Hook 实现网站的自动部署 |
转自 https://www.cnblogs.com/c-shang/p/git.html 自动部署理论首先要明确代码的分布情况,开发者电脑上的本地仓库、git服务器上的远端仓库、web服务器上的另一个本地仓库(浏览器访问的就是这里的代码)。实自动部署就是要当从开发者本地仓库提交代码到远端仓库的时候,自动把代码部署到web服务器的本地仓库,实现开发者本地仓库和web服务器的本地仓库的同步。(即通过GitHook中的post-receive脚本文件) 安装过程1)在服务器上创建一个裸仓库(git服务器上的远端仓库) cd /home/workspace/ git init --bare bim.git# Git 全局设置 git config --global user.name "xxxxx" git config --global user.email "[email protected]"在服务器上创建一个普通Git仓库,用于存放网站的源代码(web服务器上的另一个本地仓库) mkdir /www/wwwroot/workspace cd /www/wwwroot/workspace git clone /home/workspace/bim.git配置Git Hook 进入到/home/workspace/bim.git/hooks文件夹,使用vi post-receive创建一个脚本,当你在本地仓库执行git push后就会触发post-receive。 post-receive的内容如下: #!/bin/sh #判断是不是远端仓库 IS_BARE=$(git rev-parse --is-bare-repository)if [ -z "$IS_BARE" ]; thenecho >&2 "fatal: post-receive: IS_NOT_BARE"exit 1fi unset GIT_DIRDeployPath="/www/wwwroot/bim"GitPath=$DeployPath/.gitecho "pwd"|sudo -S chown bim:bim -R $DeployPath #权限问题处理 cd $DeployPath git stash git pull origin master echo "pwd"|sudo -S chown www:www -R $DeployPathecho "pwd"|sudo -S chown bim:bim -R $GitPath #git fetch --all#git reset --hard origin/master #time=`date`#echo "web server pull at webserver at time: $time."
保存后赋予可执行权限: chmod +x /var/www/workspace/springSummary/hooks/post-receive
配置开发者电脑上的本地仓库的.git/config,添加 [receive] denyCurrentBranch = ignore为开发者电脑上的本地仓库添加 remote 源: // 默认ssh端口号为22时git remote add deploy [email protected]:/home/workspace/bim.git // ssh端口号为不22时 git remote add deploy ssh://[email protected]:port/home/workspace/bim.git以后往这个 remote 源里面 push 代码就会自动触发上面那 bash 脚本实现自动部署 git push deploy master
git fetch与git pull实现的区别在于: git fetch:相当于是从远程获取最新版本到本地,不会自动merge。 git pull:相当于是从远程获取最新版本并merge到本地。 pull实现相当于fetch后再用merge,来合并本地和远端的代码。 这里就有个问题,如果开发者在提交过程出现失误,使用git reset复位后,现在远端的代码版本低于web端的代码版本,再使用pull的时候就不能实现和开发者本地的代码的同步。所以这里使用fetch后,在强制使用reset实现web端的代码版本指针和git服务端的一致。(如果在本机可以使用stash,然后pull,然后drop刚才stash的内容) git报错remote: error: cannot run hooks/post-receive: No such file or directory 若是你也显示这个错误可是其实在该路径上有上有这个文件,那么显然你遇到和我同样的状况,即你是Windows下建立的文件,可是试图在Lunix系统去打开它。这是在Windows下调用CentOS上文件显示的结果,若是你还有疑虑能够尝试在CentOS直接打开该文件,那么你将会遇到下面的错误:工具 -bash: hooks/post-receive: /bin/bash^M: bad interpreter: No such file or directorypost 由于各个操做系统的文件对于换行都是不同的,对于DOS以及Windows操做系统是以CRLF标记换行,即一个回车+一个换行,而Linux或者Unix上面是以LF为标记的,即只有一个换行,所以二者的差别决定了两个系统的文件是不能随便移植的。spa
解决方案:操作系统 我说下个人解决方案哈,最简单的方式经过Linux命令将Windows文件转换为Lunix文件——dos2unixunix 不过在此以前仍是要安装一下这个工具: yum install -y dos2unix 完成后,直接命令加文件名称进行转换: dos2unix post-receive |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |